"""
用户业务类
 uid - 账号/车牌号
 uType - 账户类型：1学生 2老师 3车辆
 password - 账号密码
"""


class UserService:
    # 检查学生、教师用户名和密码的方法
    def checkUser(self, uid, uType, password):
        # 查所有信息
        userList = self.findAll()
        for user in userList:
            if user[0] == uid and user[1] == uType and user[2] == password:
                # 信息校验通过
                return True
        return False

    # 添加用户的方法
    def insert(self, uType, password="cart_null"):
        while True:
            # 汽车是车牌号 其他为账号
            if uType == "3":
                uid = input(">> 请输入登记的车牌号：")
            else:
                uid = input(">> 请输入登记的账号ID：")
                # id不能含有本程序规定的分隔符
                if uid.find(" %% ") != -1:
                    print("【error】 账号含有非法字符，请重新输入。")
                    continue
            # 先判断是否存在 存在则添加并结束循环 不存在则跳过当前循环
            if self.isExist(uid, uType):
                if uType == 3:
                    print("【error】 该车牌已存在，请重新输入。")
                else:
                    print("【error】 该账户已存在，请重新输入。")
                continue
            else:
                # 输入密码操作，如果是汽车不用输密码
                if uType != "3":
                    password = input(">> 请输入您的密码：")
                else:
                    password = "card_null"
                # 写入文件操作
                file = open("file_user.txt", "a")
                # 当前对象以字符串形式写到文件 以 空格%%空格 分隔
                userItem = f"{uid} %% {uType} %% {password}\n"
                file.write(userItem)
                file.close()
                if uType == "3":
                    print(f"<< 登记成功，车牌号：{uid}。")
                else:
                    print(f"<< 登记成功，账户ID：{uid}，密码：{password}。")
                return

    # 判断用户是否存在
    def isExist(self, uid, uType):
        # 按类型查出用户列表
        uidList = self.findIdByType(uType)
        # 遍历用户列表 如果比较成功直接返回True
        for fileId in uidList:
            if uid+"" == fileId+"":
                return True
        return False

    # 查找某一类型账号 返回该类型账号id列表
    def findIdByType(self, uType):
        id_list = []
        user_list = self.findAll()
        if len(id_list):
            for item in user_list:
                if item[1] == str(uType):
                    id_list.append(item[0])
        return id_list

    # 查找所有信息 返回信息列表
    @staticmethod
    def findAll():
        user_list = []
        file = open("file_user.txt")
        userFileList = file.readlines()
        for i in userFileList:
            userItemList = i.replace("\n", "").split(" %% ")
            user_list.append(userItemList)
        return user_list
